package cn.com.blueInfo.bpm.system.request;

import cn.com.blueInfo.bpm.common.request.BaseDTO;
import cn.com.blueInfo.bpm.common.request.BaseQueryDTO;
import cn.com.blueInfo.bpm.system.enums.MenuType;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

/**
 * 菜单表 接收参数机校验
 * @author suxch
 * @since 2025-08-24 01:37:55
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Schema(description = "菜单 接收参数及校验")
public class MenuDTO extends BaseDTO {

    /** 菜单名称 */
    @NotBlank(message = "菜单名称 不能为空")
    @Schema(description = "菜单名称")
    private String menuName;
    /** 父级菜单ID（0代表一级菜单） */
    @NotNull(message = "父级菜单ID 不能为空")
    @Schema(description = "父级菜单ID（0代表一级菜单）")
    private Long parentId;
    /** 前端路由路径 */
    @NotBlank(message = "前端路由路径 不能为空")
    @Schema(description = "前端路由路径")
    private String routePath;
    /** 前端组件路径 */
    @NotBlank(message = "前端组件路径 不能为空")
    @Schema(description = "前端组件路径")
    private String component;
    /** 菜单图标（可选） */
    @Schema(description = "菜单图标（可选）")
    private String icon;
    /** 表单编码 */
    @Schema(description = "表单编码")
    private String formCode;
    /** 菜单类型：1-系统菜单，0-业务菜单 */
    @NotNull(message = "菜单类型 不能为空")
    @Schema(description = "菜单类型：1-系统菜单，0-业务菜单")
    private MenuType menuType;
    /** 菜单权限标识 */
    @Schema(description = "菜单权限标识")
    private String permissionKey;

    /**
     * 菜单 接收分页查询参数
     * @author suxch
     * @since 2025-08-21 05:08:55
     */
    @Data
    @EqualsAndHashCode(callSuper = true)
    @Schema(description = "菜单 接收分页查询参数")
    public static class QueryDTO extends BaseQueryDTO {

        /** 菜单名称 */
        @Schema(description = "菜单名称")
        private String menuName;
        /** 父级菜单ID（0代表一级菜单） */
        @Schema(description = "父级菜单ID（0代表一级菜单）")
        private Long parentId;
        /** 前端路由路径 */
        @Schema(description = "前端路由路径")
        private String routePath;
        /** 前端组件路径 */
        @Schema(description = "前端组件路径")
        private String component;
        /** 菜单图标（可选） */
        @Schema(description = "菜单图标（可选）")
        private String icon;
        /** 表单编码 */
        @Schema(description = "表单编码")
        private String formCode;
        /** 菜单类型：1-系统菜单，0-业务菜单 */
        @Schema(description = "菜单类型：1-系统菜单，0-业务菜单")
        private MenuType menuType;
        /** 菜单权限标识 */
        @Schema(description = "菜单权限标识")
        private String permissionKey;

    }

    /**
     * 菜单 接收部分更新参数及校验
     * @author suxch
     * @since 2025-08-21 05:08:55
     */
    @Data
    @EqualsAndHashCode(callSuper = true)
    @Schema(description = "菜单 接收部分更新参数及校验")
    public static class UpdatePartialDTO extends BaseDTO {

        /** 菜单图标（可选） */
        @Schema(description = "菜单图标（可选）")
        private String icon;
        /** 表单编码 */
        @Schema(description = "表单编码")
        private String formCode;
        /** 菜单权限标识 */
        @Schema(description = "菜单权限标识")
        private String permissionKey;

    }

}